package com.it;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortListDemo2 {
    // 主函数入口
    public static void main(String[] args) {
        // 创建一个ArrayList列表，用于存储Point对象实例
        List<Point> list = new ArrayList<>();

        // 向列表中添加五个Point对象实例，分别代表五个不同的坐标点
        list.add(new Point(1, 2));     // (1, 2)
        list.add(new Point(98, 1));    // (98, 1)
        list.add(new Point(11, 45));   // (11, 45)
        list.add(new Point(22, 90));   // (22, 90)
        list.add(new Point(89, 21));   // (89, 21)

        // 打印未排序前的列表
        System.out.println(list);
        /**
         * Collections.sort(List<T> list, Comparator<? super T> c)
         * 指定的清单进行排序根据订单指定比较器引起的。
         */


        //使用匿名内部类实现Comparator接口，重写compare()方法
        // 使用Collections.sort()方法对列表进行排序，根据自定义Comparator实现规则排序
        Collections.sort(list, new Comparator<Point>() {
            // 重写compare()方法，定义排序规则：按x坐标值大小比较
            @Override
            public int compare(Point o1, Point o2) {
                // 如果o1.x大于o2.x，返回正数（表示o1排在o2后面）
                if (o1.getX() > o2.getX())
                    return 1;

                    // 如果o1.x小于o2.x，返回负数（表示o1排在o2前面）
                else if (o1.getX() < o2.getX())
                    return -1;

                // 若两者x坐标值相等，返回0（表示两者相对位置不变）
                return 0;
            }
        });

        // 打印排序后的列表
        System.out.println(list);
    }

}
